From 929cfea1b76083f0d1204418977dd6c4e29fe082 Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild.aw" Date: Thu, 9 Mar 2006 16:24:31 -0700 Subject: [PATCH] [IA64] in_tpa is now an argument of vcpu_translate this makes in_tpa SMP-safe. Signed-off-by: Tristan Gingold --- xen/arch/ia64/xen/process.c | 2 +- xen/arch/ia64/xen/vcpu.c | 12 ++---------- xen/include/asm-ia64/vcpu.h | 4 +++- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/xen/arch/ia64/xen/process.c b/xen/arch/ia64/xen/process.c index e7846154e4..e5126c34a5 100644 --- a/xen/arch/ia64/xen/process.c +++ b/xen/arch/ia64/xen/process.c @@ -280,7 +280,7 @@ void ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_reg return; } - fault = vcpu_translate(current,address,is_data,&pteval,&itir,&iha); + fault = vcpu_translate(current,address,is_data,0,&pteval,&itir,&iha); if (fault == IA64_NO_FAULT) { pteval = translate_domain_pte(pteval,address,itir); vcpu_itc_no_srlz(current,is_data?2:1,address,pteval,-1UL,(itir>>2)&0x3f); diff --git a/xen/arch/ia64/xen/vcpu.c b/xen/arch/ia64/xen/vcpu.c index 3355a638c3..a5b58f3f68 100644 --- a/xen/arch/ia64/xen/vcpu.c +++ b/xen/arch/ia64/xen/vcpu.c @@ -6,12 +6,6 @@ * */ -#if 1 -// TEMPORARY PATCH for match_dtlb uses this, can be removed later -// FIXME SMP -int in_tpa = 0; -#endif - #include #include #include @@ -1290,7 +1284,7 @@ unsigned long recover_to_break_fault_count = 0; int warn_region0_address = 0; // FIXME later: tie to a boot parameter? -IA64FAULT vcpu_translate(VCPU *vcpu, UINT64 address, BOOLEAN is_data, UINT64 *pteval, UINT64 *itir, UINT64 *iha) +IA64FAULT vcpu_translate(VCPU *vcpu, UINT64 address, BOOLEAN is_data, BOOLEAN in_tpa, UINT64 *pteval, UINT64 *itir, UINT64 *iha) { unsigned long region = address >> 61; unsigned long pta, pte, rid, rr; @@ -1402,9 +1396,7 @@ IA64FAULT vcpu_tpa(VCPU *vcpu, UINT64 vadr, UINT64 *padr) UINT64 pteval, itir, mask, iha; IA64FAULT fault; - in_tpa = 1; - fault = vcpu_translate(vcpu, vadr, 1, &pteval, &itir, &iha); - in_tpa = 0; + fault = vcpu_translate(vcpu, vadr, TRUE, TRUE, &pteval, &itir, &iha); if (fault == IA64_NO_FAULT) { mask = itir_mask(itir); diff --git a/xen/include/asm-ia64/vcpu.h b/xen/include/asm-ia64/vcpu.h index dd2eb85a89..42e3817d74 100644 --- a/xen/include/asm-ia64/vcpu.h +++ b/xen/include/asm-ia64/vcpu.h @@ -140,7 +140,9 @@ extern IA64FAULT vcpu_ptc_g(VCPU *vcpu, UINT64 vadr, UINT64 addr_range); extern IA64FAULT vcpu_ptc_ga(VCPU *vcpu, UINT64 vadr, UINT64 addr_range); extern IA64FAULT vcpu_ptr_d(VCPU *vcpu,UINT64 vadr, UINT64 addr_range); extern IA64FAULT vcpu_ptr_i(VCPU *vcpu,UINT64 vadr, UINT64 addr_range); -extern IA64FAULT vcpu_translate(VCPU *vcpu, UINT64 address, BOOLEAN is_data, UINT64 *pteval, UINT64 *itir, UINT64 *iha); +extern IA64FAULT vcpu_translate(VCPU *vcpu, UINT64 address, + BOOLEAN is_data, BOOLEAN in_tpa, + UINT64 *pteval, UINT64 *itir, UINT64 *iha); extern IA64FAULT vcpu_tpa(VCPU *vcpu, UINT64 vadr, UINT64 *padr); extern IA64FAULT vcpu_force_data_miss(VCPU *vcpu, UINT64 ifa); extern IA64FAULT vcpu_fc(VCPU *vcpu, UINT64 vadr); -- 2.30.2